EC2に安全に接続するには どのような方法があるのだろう?

EC2に安全に接続するには どのような方法があるのだろう?

この記事は アノテーション株式会社 AWS Technical Support - Qiita Advent Calendar 2024 - Qiita 21日目の記事です。


こんにちは!Koty-Mousa 矢坂幸太郎 です!

手元のPCからEC2インスタンス内部(OSなど)を操作するには、何らかの方法でアクセスしなければいけません。
以前にも、いくつかの方法を紹介しましたが、どのような仕組みで動作しているのか 気になったのでまとめました!

シンプルな構成のSSH

まずは、基本となる SSH (手元PCから)を見てみます。

EC2仕組みシンプル

こちらは、シンプルな構成でのSSHです。
パブリックサブネットに EC2 を配置しています

手元PCから、下記コマンドで接続します。

ssh -i 秘密鍵.pem ec2-user@ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com

キーペア作成時にダウンロードした .pem キーを使って認証・接続します。

私は検証等でこの構成を使用することがあります。

しかしながら、認証こそ実施していますが、EC2をパブリックサブネットに配置する(=インターネットに直接つながる)のは安全ではありません。ポートスキャンやDDoS攻撃等の対象にされた場合の被害が大きくなる可能性があります。

このため、公開する必要のない EC2インスタンスは プライベートサブネットに配置する(=インターネットに接続できない)ことをおすすめします。
また、どうしてもこの構成が必要な場合は、セキュリティグループで 手元PC からのアクセスのみ許可するなど、必要最低限の設定を行うことが大切です。

しかし、インターネットに接続できないクラウド上のインスタンスに、どのようにアクセスすれば良いのでしょうか?

踏み台サーバ を用いたSSH

EC2仕組み踏み台

こちらは、接続先の EC2 は、プライベートサブネット、インターネットに接続できません。
しかし、別の パブリックサブネットの EC2 を用意して、手元PCからは そちらに接続します。
パブリック EC2 から プライベート EC2 に接続します。

つまり、別の EC2 を経由することで、当該EC2 をインターネットに公開する必要がなくなります。
これにより、安全性をより高めることができます!
ここでの "別の EC2" は、「踏み台サーバ」や「Jump Server」、「Bastion Host」などと呼ばれます。

Client VPN

AWS 環境へ、VPN接続を行うことで、EC2 インスタンスに安全に接続することができます。

EC2仕組みClientVPN

EC2インスタンス を プライベートサブネットに配置した状態で利用可能なため、より安全な運用を行うことができます。

この構成は、VPNを利用するためのクライアント証明書が必要です。
AWSではACM(AWS Certificate Manager)で認証局を設定可能ですが、プライベートCA 汎用モードの場合、月額400ドルほどのコストがかかります。
また、手元PC にVPNの設定が必要となります。

参照:AWS プライベート CA の料金 – AWS Private Certificate Authority – Amazon Web Services

今回、検証を行いたかったのですが、高価なため断念しました。

EC2 Instance Connect Endpoint

以前のブログで記載した、 Instance Connect は、EC2 がパブリックサブネットに配置されている必要があります。
EC2インスタンス起動してみた!|Amazon Linux 2023 | DevelopersIO
それとは別に、VPCエンドポイントを用いた形式の Instance Connect もあります

具体的な操作方法は、下記記事をご覧ください。
[アップデート]パブリック IP アドレスなしで、EC2インスタンスにSSH接続できる EC2 Instance Connect Endpointがリリースしました | DevelopersIO

EC2仕組みEIC

※ EIC = EC2 Instance Connect

構成は 踏み台サーバ や ClientVPN と似ていますが、こちらは AWS が管理する仕組み(=マネージドサービス)です。

キー管理はAWS側が行うため、キーペアを設定しなくても、接続が可能となります!
(構成図から、キーペアを省略しておりますが、ユーザが用意する必要がない という意味であり、実際には安全な接続が行われています)

Session Manager(System Manager)

Session Manager は、SSHとは異なる仕組みで接続します。

EC2仕組みSMSM

Instance Connect は、OS に SSH 接続を行うのに対し、Session Manager は EC2 にインストールされているSSM Agent(Systems Manager Agent )を経由して、OSにアクセスします。
そのため、SSH 22 ポート接続を許可する必要はありません。

プライベートサブネットにある EC2 インスタンスに接続するために、今回は VPCエンドポイント を使用します。
下記エンドポイントを、該当VPCに作成してください。

com.amazonaws.region.ssm
com.amazonaws.region.ssmmessages
com.amazonaws.region.ec2messages

また、EC2インスタンスに、IAMポリシー AmazonSSMManagedInstanceCore を付与した IAMロールをアタッチしてください。

こちらも、キー管理は不要ですが、安全な接続が行われています。

ちょっとした注意

通常、EC2起動時に自動でユーザが作成されます。Amazon Linuxは ec2-user となっています。
その他のOSは下記をご参照ください
Amazon EC2 Linux インスタンスのシステムユーザーを管理する - Amazon Elastic Compute Cloud
しかし、Session Manager 経由で接続すると、ssm-user というユーザが作成され、ssm-user としてログインされます。
必要に応じて、ユーザの切り替えを行ってください。
Amazon Linux で、 ec2-user に切り替えるには、次のコマンドを実行します

sudo su - ec2-user

他にもあります

ここでご紹介した手法の他にも、さまざまな接続方法があります。
お客様の要件によって、適切な方法は異なります。
また、今回は鍵管理については大きく触れていませんが、秘密鍵は適切な管理が求められます。
EC2 は非常に便利で 僕も大好きなサービスですが、より安全に利用することを今後も心がけます。

Koty-Mousa 矢坂幸太郎 がお伝えしました!


The avatar, logo and name of "Koty-Mousa 矢坂幸太郎" and "Clamerus, dev. by Koty-Mousa" (include inconsistent/abbreviation spelling) are owned and copyrighted by Koty-Mousa (individually).

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.